#if !defined(__APP_SERIAL_H__)
#define __APP_SERIAL_H__

#include <termio.h>
#include "app_device.h"

// 波特率枚举
typedef enum
{
    BR_9600 = B9600,
    BR_115200 = B115200
}SERIAL_BAUD_RATE;

typedef enum
{
    PARITY_NONE = 0, // 无校验
    PARITY_ODD = PARENB | PARODD, // 奇校验
    PARITY_EVEN = PARENB, // 偶校验
}SERIAL_PARITY;

// 停止位枚举
typedef enum
{
    STOP_BIT_ONE = 0, // 一位停止位
    STOP_BIT_TWO = CSTOPB, // 2位停止位
}SERIAL_STOP_BIT;
/**
 * @brief 串口的初始化
 * @return int 0:成功, -1:失败
 */
int app_serial_init(device_t *device);

/**
 * @brief 波特率设置
 * @param baud 波特率
 * @return int 0:成功, -1:失败
 */
int app_serial_set_baud(device_t *device,SERIAL_BAUD_RATE baud);
 
/**
 * @brief 校验位
 * @param check 校验位
 * @return int 0:成功, -1:失败
 */
int app_serial_set_check(device_t *device,SERIAL_PARITY check);

/**
 * @brief 停止位
 * @param stop 停止位
 * @return int 0:成功, -1:失败
 */
int app_serial_set_stop(device_t *device,SERIAL_STOP_BIT stop);

/**
 * @brief 设置原始模式
 * @return int 0:成功, -1:失败 
 */
int app_serial_set_makeraw(device_t *device);

/**
 * @brief 设置是否阻塞模式
 * @param block 0:非阻塞, 1:阻塞
 * @return int 0:成功, -1:失败
 */
int app_serial_set_block(device_t *device,int block);

#endif